<?php
// ce script analyse les données entrées pour créer un compte
// et le créé pour de bon si les données sont correctes

		
	
function verifier_creation_compte()
{

	$resultat_formulaires = "";
	if(isset ($_POST['new_login'], $_POST['mail'], $_POST['new_mdp'] , $_POST['creation_compte'], 
	$_POST['new_mdp_bis'], $_POST['captcha'], $_SESSION['captcha']) AND strlen($_SESSION['captcha'])>=1 )
	{	
		//protection contre les failles CSRF : on vérifie la validité d'un token
		include_once "../Securite/protection_CSRF.php";
		$enter=false;
		if(verifier_token(3600, 'Pages/inscription.php', 'creation_compte', 'token_creation_compte'))
				$enter=true;
			
		else	// s'il est connecté et qu'il n'y a pas de token, c'est qu'on a détecté une attaque CSRF
			$resultat_formulaires .=' Erreur : l\'authenticit&eacute; du compte n\'a pas pu &ecirc;tre v&eacute;rifi&eacute;e. 
				<br /> Veuillez vous reconnecter <br />';
		require_once "../Securite/parser_chaines.php";
		$_POST['captcha'] = securite_chaine($_POST['captcha']);
		if($enter)
		{		
			$login = $_POST['new_login'];
			$mail = $_POST['mail'];
			$_POST['new_login']= securite_chaine( $_POST['new_login']);	// on évite l'injection de code
			$_POST['mail']= securite_chaine($_POST['mail']);
			
			if($_POST['new_login'] == "login")
				$resultat_formulaires .= 'pseudo déjà existant<br />';
			else
			{		
			// lecture des tailles limites pour les login, mots de passes, adresse mail...
				require_once "tailles_autorisees.php";
				$tailles = get_tailles_autorisees();
	
	/*'minLogin' => 3,
		'maxLogin' => 32,
		'minMotPasse' => 4,$taille['']
		'maxMail' => 
		*/
				$correct = true;		// vérification des paramètres
				$taille = strlen($login);
				if(strlen($login) < $tailles['minLogin']){
					$resultat_formulaires .= ' Veuillez entrer un pseudo d\'au moins '.$tailles['minLogin'].' caract&egrave;res <br />';
					$correct = false;
				}
				if	(strlen($login) > $tailles['maxLogin']){
					$resultat_formulaires .= 'Veuillez entrer un pseudo de moins de '.$tailles['maxLogin'].' caract&egrave;res <br />';
					$correct = false;
				}
				if (strlen($_POST['new_mdp']) < $tailles['minMotPasse']){
					$resultat_formulaires .= 'Veuillez entrer un mot de passe d\'au moins '.$tailles['minMotPasse'].' caract&egrave;res <br />';
					$correct = false;
				}
				
				else if ( $_POST['new_mdp'] !== $_POST['new_mdp_bis']){
					$resultat_formulaires .= 'Les deux mots de passe sont diff&eacute;rents <br />';
					$correct = false;
				}
				
				if(strlen($mail) > $tailles['maxMail']){
					$resultat_formulaires .= 'Veuillez entrer une adresse mail de moins de '.$tailles['maxMail'].' caract&egrave;res <br />';
					$correct = false;
				}
				if(filter_var($mail, FILTER_VALIDATE_EMAIL) === false) 
				//if (! preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,}$#", $mail))	//méthode au choix : expression régulière ou filtre
				{
					$resultat_formulaires .= 'Adresse mail invalide <br />';
					$correct = false;
				}
				
				if ($login != $_POST['new_login'] ){
					$resultat_formulaires .= ' Veuillez ne pas entrer de  caract&egrave;re sp&eacute;cial dans le mail ou le login <br />';
					$correct = false;
				}
					
				if ($_POST['captcha'] !== $_SESSION['captcha'])	{
					$resultat_formulaires .= " Le captcha n'a pas bien &eacute;t&eacute; recopi&eacute; <br />";
					$correct = false;
				}
				
				if(! isset($_POST['chartre']) || $_POST['chartre'] != "on")	{
					$resultat_formulaires .= " Vous devez accepter la chartre <br />";
					$correct = false;
				}
					
				if($correct)	// les données du formulaire sont cohérentes
				{	
					include_once "../Codes/fonctionsSGBD.php";
					$bdd=ouvrirBase();
					if( strlen($_POST['new_login'])>0 ) 	// on vérifie que le login n'est pas vide
					{
						$reponse = $bdd->prepare('SELECT pseudo FROM dil_comptes WHERE pseudo = :id	');
						
						$reponse->bindValue('id', $_POST['new_login'], PDO::PARAM_STR);
						$reponse->execute();
						if($donnees = $reponse->fetch() )	// si le nom est enregistré dans la base de donnée (identifiant unique)
						{
							$resultat_formulaires .= 'pseudo déjà existant<br />';
						}
						else
						{		// quand on enregistre un mot de passe, on rajoute 2 salt au début et à la fin du mot de passe
							$salt_pre="";		// chaque utilisateur à ses propres salts.
							$salt_suf="";
							for($i=0; $i<3; $i++)
							{
								$salt_pre .=mt_rand(0,9);
								$salt_suf .=rand(0,9);
							}
							$statut = "ecrivain";		
							$inscription=$bdd->prepare('INSERT INTO dil_comptes (pseudo, mail, salt_prefixe, salt_suffixe, password, statut) 
							VALUES ( :pseudo, :mail, :salt_prefixe, :salt_suffixe, :password, :statut)');
							
							$inscription->bindValue('pseudo', $_POST['new_login'], PDO::PARAM_STR);
							$inscription->bindValue('mail', $_POST['mail'], PDO::PARAM_STR);
							$inscription->bindValue('salt_prefixe', $salt_pre, PDO::PARAM_STR);
							$inscription->bindValue('salt_suffixe', $salt_suf, PDO::PARAM_STR);
							$inscription->bindValue('password', sha1($salt_pre.$_POST['new_mdp'].$salt_suf), PDO::PARAM_STR);
							$inscription->bindValue('statut', $statut, PDO::PARAM_STR);
							
							$inscription->execute();						
							
							
							$resultat_formulaires .='Le compte '.$_POST['new_login']. ' a bien &eacute;t&eacute; cr&eacute;&eacute;
							';
						}
						
					$reponse->closeCursor();
					}
				}
			}
		}
	}
	return $resultat_formulaires;
}

?>
